#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
  
struct s_data {  
    char value;  
    struct s_data* next;  
    struct s_data* llink; // 一般用于双向链表的前驱指针，但在这个实现中可能并不需要  
};  
typedef struct s_data data;  
  
data* head;  
data* ptr;  
data* temp;  
  
data* create_node(char a) {  
    data* newdata = (data*)malloc(sizeof(data));  
    newdata->value = a;  
    newdata->next = NULL;  
    newdata->llink = NULL; // 初始化为NULL，但在单向链表实现中未使用  
    return newdata;  
}  
  
void insert(char a) {  
    data* newdata = create_node(a);  
    if (head->next == NULL) {  
        head->next = newdata;  
        ptr = newdata;  
    } else {  
        ptr->next = newdata;  
        ptr = newdata;  
    }  
}  
  
void move_to_start() {  
    ptr = head->next;  
}  
  
void move_to_end() {  
    while (ptr->next != NULL) {  
        ptr = ptr->next;  
    }  
}  
  
void move_left() {  
    if (ptr != head->next) {  
        ptr = ptr->llink->next; // 这里使用 llink 作为临时解决方案，但理想情况应单独维护前驱指针或从头遍历  
    }  
}  
  
void move_right() {  
    if (ptr->next != NULL) {  
        ptr = ptr->next;  
    }  
}  
  
void delete_char() {  
    if (ptr != head->next) {  
        data* prev = head;  
        while (prev->next != ptr) {  
            prev = prev->next;  
        }  
        temp = ptr->next;  
        prev->next = temp;  
        free(ptr);  
        ptr = temp;  
        if (ptr == NULL) { // 如果删除的是最后一个字符  
            ptr = head->next;  
        }  
    } else { // 如果删除的是第一个字符  
        temp = head->next;  
        head->next = temp->next;  
        free(temp);  
        ptr = head->next;  
    }  
}  
  
int main() {  
    head = create_node('\0'); // 创建一个哨兵节点  
    head->llink = NULL; // 哨兵节点不需要前驱指针  
    ptr = head;  
    char m[100];  
    scanf(" %s", m);  
    int n = 0;  
    do {  
        if (m[n] == '{') {  
            move_to_start();  
        } else if (m[n] == '}') {  
            move_to_end();  
        } else if (m[n] == '<') {  
            move_left();  
        } else if (m[n] == '>') {  
            move_right();  
        } else if (m[n] == '#') {  
            delete_char();  
        } else {  
            insert(m[n]);  
        }  
        n++;  
    } while (m[n] != '\0');  
  
    ptr = head->next;  
    while (ptr != NULL) {  
        printf("%c", ptr->value);  
        ptr = ptr->next;  
    }  
    printf("\n");  
    ptr = head->next;  
    while (ptr != NULL) {  
        temp = ptr;  
        ptr = ptr->next;  
        free(temp);  
    }  
    free(head);  
  
    return 0;  
}